<!-- 
    bind()方法不会调用函数，但是能改变函数的内部this指向
    fun.bind(thisArg,arg1,arg2,...)
    thisArg:在fun函数运行时指定的this值
    arg1,arg2:传递的其它参数
    返回由指定的this值和初始化参数改造的原函数拷贝
 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>点击</button>
    <button>点击</button>
    <button>点击</button>
    <script>
        var o = {
            name: 'andy'
        };

        function fn(a, b) {
            console.log(this);
            console.log(a + b);
        };
        var f = fn.bind(o, 1, 2);  //原函数的拷贝，f接收的函数
        f();

        //不会调用原来的函数，可以改变原来函数内部的this指向
        //2.返回的是原函数改变this之后的新产生的函数
        //3.后面的参数可以传值
        //4.如果有的函数我们不需要立即调用，但是又想改变函数内部的this指向此时用bind

        //5，有一个案例，我们有一个按钮，当我们点击之后，就禁用这个按钮，3秒钟开启按钮
        // var btn = document.querySelector('button');
        // btn.onclick = function () {
        //     this.disabled = true;  //禁用按钮 这里面的this指向的是btn按钮

        //     setTimeout(function () {
        //         //定时器里面的函数不需要直接调用，但是想改变this指向，这就用到了bind
        //         this.disabled = false;  //这里面this就指向btn按钮了

        //     }.bind(this), 3000) //不会立即去调用函数，而是过3秒，
        //     //这里面的this是在外面，在btn按钮里面，所以this的指向就是btn这个按钮
        // }

        //点击3个按钮不能写btn[i]
        var btns = document.querySelectorAll('button');
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function () {
                this.disabled = true;
                setTimeout(function () {
                    this.disabled = false;
                }.bind(this), 2000)  //这里把定时器里面的this改成btn[i]中的this，然后，定时器拿到点击事件里面的this
            }

        }




    </script>
</body>

</html>